package com.data.migration.service;

import com.data.migration.entity.Operation;
import com.data.migration.util.DBUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Peter on 2018/12/8.
 * 迁移1v1课程数据
 */
public class Step_5_Weike {
    public static final String step = "5";
    public static final String stepDesc = "微课";

    private final Logger logger = LoggerFactory.getLogger(Step_5_Weike.class);
    public List<Operation> insertSql = new ArrayList<>();//插入课程的sql

    public static void main(String[] args) throws SQLException {
        Step_5_Weike step = new Step_5_Weike();
        step.start();
//        step.clean();
    }

    public void start() throws SQLException {
        logger.info("\n******************************************************************************" +
                "\n======================== Step " + step + ": " + stepDesc + " start ================================" +
                "\n******************************************************************************\n");
        step_1();
        step_2();
        step_2_2();
        step_2_3();
        step_3();
        step_3_2();
        step_4();
        step_4_2();
        step_4_3();
        step_5();
        step_5_2();
        step_6();
        step_6_2();
        step_6_3();
        step_7();
        step_7_2();
        step_8();
        step_8_2();
        step_8_3();
        step_9();
        step_9_2();
        step_9_3();
        step_9_4();
        step_10();
        step_10_2();
        step_10_3();
        step_10_4();

        logger.info("\n******************************************************************************" +
                "\n======================== Step " + step + ": " + stepDesc + " end ================================" +
                "\n******************************************************************************\n");
    }

    public void clean() throws SQLException {
        logger.info("\n******************************************************************************" +
                "\n======================== 【clean】 Step " + step + ": " + stepDesc + " start =========================" +
                "\n******************************************************************************");
        step_1_clean();
        step_2_clean();
        step_3_clean();
        step_4_clean();
        step_5_clean();
        step_6_clean();
        step_7_clean();
        step_8_clean();
        step_9_clean();
        step_10_clean();

        logger.info("\n******************************************************************************" +
                "\n======================== 【clean】 Step " + step + ": " + stepDesc + " end =========================" +
                "\n******************************************************************************");
    }


    // 1. 微课分类【ts_nt_dict】     ---------------------------------------------------------------------------------------------1
    public void step_1() throws SQLException {
        logger.info("\n     --------- 5.1 微课分类【ts_nt_dict】 start --------- ");
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "ts_nt_dict"; // 表名
        String pk = "DICT_ID"; // 主键（自增）的列名字
        String where = " where `CODE_TYPE`='zhishishichangType'";
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, where, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    public void step_1_clean() throws SQLException {
        logger.info("\n     ---------【clean】 5.1 微课分类【ts_nt_dict】 start --------- ");
        String sql = "delete from ts_nt_dict where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 2. 微课 【wk_weike】     ----------------------------------------------------------------------------------------------------2
    public void step_2() throws SQLException {
        logger.info("\n     --------- 5.2  微课 【wk_weike】 start --------- ");
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "wk_weike"; // 表名
        String pk = "id"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    // 2.2 更新外键【wk_weike.category_id】
    public void step_2_2() throws SQLException {
        String sql = "UPDATE wk_weike as A\n" +
                "INNER JOIN (select DICT_ID,t_id,app_type from ts_nt_dict where app_type='T' and CODE_TYPE='zhishishichangType') as B\n" +
                "ON A.category_id = B.t_id\n" +
                "SET A.category_id=B.DICT_ID\n" +
                "where A.app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 2.3 更新外键【wk_weike.create_user】
    public void step_2_3() throws SQLException {
        String ftableName = "wk_weike"; // 附表表名
        String fk = "create_user";// 附表外键
        String ptableName = "td_nt_teacher";//主表的表名
        String pk = "TEA_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    public void step_2_clean() throws SQLException {
        logger.info("\n     ---------【clean】 1.3 课程 【ts_nt_course_info】 start --------- ");
        String sql = "delete from wk_weike where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 3. 微课订阅（VIP） 【wk_weike_subscription】     ----------------------------------------------------------------------------3
    public void step_3() throws SQLException {
        logger.info("\n     --------- 5.3  微课订阅（VIP） 【wk_weike_subscription】 start --------- ");
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "wk_weike_subscription"; // 表名
        String pk = "id"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    // 3.2 更新外键【wk_weike_subscription.memb_id】
    public void step_3_2() throws SQLException {
        String ftableName = "wk_weike_subscription"; // 附表表名
        String fk = "MEMB_ID";// 附表外键
        String ptableName = "td_nt_member";//主表的表名
        String pk = "MEMB_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    public void step_3_clean() throws SQLException {
        logger.info("\n     ---------【clean】 5.3  微课订阅（VIP） 【wk_weike_subscription】 start --------- ");
        String sql = "delete from wk_weike_subscription where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 4. 微课评论 【wk_weike_comments】     ---------------------------------------------------------------------------------------4
    public void step_4() throws SQLException {
        logger.info("\n     --------- 5.4  微课评论 【wk_weike_comments】 start --------- ");
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "wk_weike_comments"; // 表名
        String pk = "id"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    // 4.2 更新外键【wk_weike_comments.weike_id】
    public void step_4_2() throws SQLException {
        String ftableName = "wk_weike_comments"; // 附表表名
        String fk = "weike_id";// 附表外键
        String ptableName = "wk_weike";//主表的表名
        String pk = "id"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 4.2 更新外键【wk_weike_comments.memb_id】
    public void step_4_3() throws SQLException {
        String ftableName = "wk_weike_comments"; // 附表表名
        String fk = "MEMB_ID";// 附表外键
        String ptableName = "td_nt_member";//主表的表名
        String pk = "MEMB_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    public void step_4_clean() throws SQLException {
        logger.info("\n     ---------【clean】 5.4  微课评论 【wk_weike_comments】 start --------- ");
        String sql = "delete from wk_weike_comments where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 5. 微课目录 【wk_weike_part】     ----------------------------------------------------------------------------5
    public void step_5() throws SQLException {
        logger.info("\n     --------- 5.5  微课目录 【wk_weike_part】 start --------- ");
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "wk_weike_part"; // 表名
        String pk = "id"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    // 更新外键【wk_weike_part.weike_id】
    public void step_5_2() throws SQLException {
        String ftableName = "wk_weike_part"; // 附表表名
        String fk = "weike_id";// 附表外键
        String ptableName = "wk_weike";//主表的表名
        String pk = "id"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    public void step_5_clean() throws SQLException {
        logger.info("\n     ---------【clean】5.5  微课目录 【wk_weike_part】 start --------- ");
        String sql = "delete from wk_weike_part where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 6. 微课内容 【wk_weike_content】     ----------------------------------------------------------------------------6
    public void step_6() throws SQLException {
        logger.info("\n     --------- 5.6  微课内容 【wk_weike_content】 start --------- ");
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "wk_weike_content"; // 表名
        String pk = "id"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    // 更新外键【wk_weike_content.weike_id】
    public void step_6_2() throws SQLException {
        String ftableName = "wk_weike_content"; // 附表表名
        String fk = "weike_id";// 附表外键
        String ptableName = "wk_weike";//主表的表名
        String pk = "id"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 更新外键【wk_weike_content.create_user】
    public void step_6_3() throws SQLException {
        String ftableName = "wk_weike_content"; // 附表表名
        String fk = "create_user";// 附表外键
        String ptableName = "td_nt_teacher";//主表的表名
        String pk = "TEA_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    public void step_6_clean() throws SQLException {
        logger.info("\n     ---------【clean】5.6  微课内容 【wk_weike_content】 start --------- ");
        String sql = "delete from wk_weike_content where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }


    // 7. 微课图片 【wk_weike_image】     ----------------------------------------------------------------------------7
    public void step_7() throws SQLException {
        logger.info("\n     --------- 5.7  微课图片 【wk_weike_image】 start --------- ");
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "wk_weike_image"; // 表名
        String pk = "id"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    // 更新外键【wk_weike_image.weike_id】
    public void step_7_2() throws SQLException {
        String ftableName = "wk_weike_image"; // 附表表名
        String fk = "weike_id";// 附表外键
        String ptableName = "wk_weike";//主表的表名
        String pk = "id"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    public void step_7_clean() throws SQLException {
        logger.info("\n     ---------【clean】5.7  微课图片 【wk_weike_image】 start --------- ");
        String sql = "delete from wk_weike_image where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 8. 微课购买 【wk_weike_student_buy】     ----------------------------------------------------------------------------8
    public void step_8() throws SQLException {
        logger.info("\n     --------- 5.8  微课购买 【wk_weike_student_buy】 start --------- ");
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "wk_weike_student_buy"; // 表名
        String pk = "id"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    // 更新外键【wk_weike_student_buy.weike_id】
    public void step_8_2() throws SQLException {
        String ftableName = "wk_weike_student_buy"; // 附表表名
        String fk = "weike_id";// 附表外键
        String ptableName = "wk_weike";//主表的表名
        String pk = "id"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 更新外键【wk_weike_student_buy.memb_id】
    public void step_8_3() throws SQLException {
        String ftableName = "wk_weike_student_buy"; // 附表表名
        String fk = "memb_id";// 附表外键
        String ptableName = "td_nt_member";//主表的表名
        String pk = "MEMB_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    public void step_8_clean() throws SQLException {
        logger.info("\n     ---------【clean】5.8  微课购买 【wk_weike_student_buy】 start --------- ");
        String sql = "delete from wk_weike_student_buy where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 9. 微课 学生播放记录 【wk_weike_student_played_audio】     ----------------------------------------------------------9
    public void step_9() throws SQLException {
        logger.info("\n     --------- 5.9  微课 学生播放记录 【wk_weike_student_played_audio】 start --------- ");
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "wk_weike_student_played_audio"; // 表名
        String pk = "id"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    // 更新外键【wk_weike_student_played_audio.weike_id】
    public void step_9_2() throws SQLException {
        String ftableName = "wk_weike_student_played_audio"; // 附表表名
        String fk = "weike_id";// 附表外键
        String ptableName = "wk_weike";//主表的表名
        String pk = "id"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 更新外键【wk_weike_student_played_audio.memb_id】
    public void step_9_3() throws SQLException {
        String ftableName = "wk_weike_student_played_audio"; // 附表表名
        String fk = "memb_id";// 附表外键
        String ptableName = "td_nt_member";//主表的表名
        String pk = "MEMB_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 更新外键【wk_weike_student_played_audio.weike_content_id】
    public void step_9_4() throws SQLException {
        String ftableName = "wk_weike_student_played_audio"; // 附表表名
        String fk = "weike_content_id";// 附表外键
        String ptableName = "wk_weike_content";//主表的表名
        String pk = "id"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    public void step_9_clean() throws SQLException {
        logger.info("\n     ---------【clean】5.9  微课 学生播放记录 【wk_weike_student_played_audio】 start --------- ");
        String sql = "delete from wk_weike_student_played_audio where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 10. 微课 学习进度 【wk_weike_student_study_part】     ------------------------------------------------------------10
    public void step_10() throws SQLException {
        logger.info("\n     --------- 5.10  微课 学习进度 【wk_weike_student_study_part】 start --------- ");
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "wk_weike_student_study_part"; // 表名
        String pk = "id"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    // 更新外键【wk_weike_student_study_part.weike_id】
    public void step_10_2() throws SQLException {
        String ftableName = "wk_weike_student_study_part"; // 附表表名
        String fk = "weike_id";// 附表外键
        String ptableName = "wk_weike";//主表的表名
        String pk = "id"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 更新外键【wk_weike_student_study_part.memb_id】
    public void step_10_3() throws SQLException {
        String ftableName = "wk_weike_student_study_part"; // 附表表名
        String fk = "memb_id";// 附表外键
        String ptableName = "td_nt_member";//主表的表名
        String pk = "MEMB_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 更新外键【wk_weike_student_study_part.weike_part_id】
    public void step_10_4() throws SQLException {
        String ftableName = "wk_weike_student_study_part"; // 附表表名
        String fk = "weike_part_id";// 附表外键
        String ptableName = "wk_weike_part";//主表的表名
        String pk = "id"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    public void step_10_clean() throws SQLException {
        logger.info("\n     ---------【clean】5.10  微课 学习进度 【wk_weike_student_study_part】 start --------- ");
        String sql = "delete from wk_weike_student_study_part where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

}
